package article_api

import (
	"context"
	"fmt"
	"github.com/gin-gonic/gin"
	"github.com/olivere/elastic/v7"
	"giv-vue-blog/global"
	"giv-vue-blog/models"
	"giv-vue-blog/models/res"
	"giv-vue-blog/service/es_ser"
)

type IDListRequest struct {
	IDList []string `json:"id_list"`
}

// ArticleDel 删除文章
// @Tags 文章管理
// @Summary 删除文章
// @Description 删除文章
// @Param data body IDListRequest true "表示多个参数"
// @Router /api/articles [delete]
// @Produce json
// @Success 200 {object} res.Response{data=string}
func (ArticleApi) ArticleDel(c *gin.Context) {
	var cr IDListRequest
	err := c.ShouldBindJSON(&cr)
	if err != nil {
		global.Log.Error(err)
		res.FailedWithCode(res.ArgumentError, c)
		return
	}
	//TODO: 如果文章删除了 用户收藏的这篇文章怎么办?
	//方法1、顺带把与这个文章关联的收藏也删除了
	//方法2、用户收藏表新增一个字段，表示文章是否删除
	bulkService := global.EsClient.Bulk().Index(models.ArticleModel{}.Index()).Refresh("true")
	for _, id := range cr.IDList {
		req := elastic.NewBulkDeleteRequest().Id(id)
		bulkService.Add(req)
		go es_ser.DeleteFullTextByID(id)
	}
	result, err := bulkService.Do(context.Background())
	if err != nil {
		res.FailedWithMsg("删除失败", c)
		return
	}
	res.OkWithMsg(fmt.Sprintf("成功删除 %d 篇文章", len(result.Succeeded())), c)
	return
}
